const joi = require("joi")

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */
//账号验证规则
const username = joi.string().alphanum().min(1).max(10).required()

//密码验证规则
const password = joi.string().pattern(/^[\S]{6,12}$/).required()
//通过 expressJoi（reg_login_schema）会直接验证req.body中的数据
exports.reg_login_schema = {
    body:{
        username,password
    }
}
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()

exports.reg_userinfo_schema = {
    body:{
        id,nickname,email
    }
}


exports.reg_updatepwd_schema = {
    body: {
      // 使用 password 这个规则，验证 req.body.oldPwd 的值
      oldPwd: password,
      // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
      // 解读：
      // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
      // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
      // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
      // @ts-ignore
      newPwd: joi.not(joi.ref('oldPwd')).concat(password),
    },
  }

// dataUri() 指的是如下格式的字符串数据：base64格式
// 
const avatar = joi.string().dataUri().required()

exports.reg_updatePic_schema = {
    body:{
        avatar
    }
}

const name = joi.string().required()
const alias = joi.string().alphanum().required()

exports.reg__addCate_schema = {
    body:{
        name,alias
    }
}

exports.reg_deleteCate_schema = {
    params:{
        id
    }
}

exports.reg_updateAct_schema = {
        body:{
            id,alias,name
        }
}

const title = joi.string().required()
const cate_id = joi.number().integer().min(1).required()
const content = joi.string().required().allow('')
const state = joi.string().valid('已发布', '草稿').required()

exports.add_article_schema = {
    body: {
      title,
      cate_id,
      content,
      state,
    },
  }